from time import sleep
from selenium import webdriver
import nostore

pd = nostore.pwd
driver = webdriver.Firefox()
driver.get('https://mail.163.com/')


# 获取页面所有框架
frames = driver.find_elements_by_tag_name('iframe')
print(len(frames))
for f in frames:
    # 在三个frame中，我们要的没有name属性，其他两个都有name属性
    # 通过实验得出。账号所在ifamr的序号为2（第3个框架）
    print(f.get_attribute('name'))

# 通过框架索引切换到登录输入框架
driver.switch_to.frame(2)
driver.find_element_by_name('email').send_keys('ma_linpop')
driver.find_element_by_name('password').send_keys(pd)
driver.find_element_by_link_text('登  录').click()
sleep(5)

# 开始写信

# 注意：必须先切换到原始位置（可能提示：试图定位一个死亡的元素）
driver.switch_to.default_content()

# 先定位到一个“写信”按钮上方的 ID 属性固定的元素
t1 = driver.find_element_by_id('dvNavTop')
# 定位 t1 元素里面的所有 li 标签元素
# 其中：第一个li：收信， 第二个li：写信
t2 = t1.find_elements_by_tag_name('li')
# 点击写信元素
t2[1].click()
sleep(2)

# 收件人
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('ma_linpop@163.com')
# 主题
# 该class属性不唯一，通过返回的列表索引定位目的元素
driver.find_elements_by_class_name('nui-ipt-input')[2].click()
driver.find_elements_by_class_name('nui-ipt-input')[2].send_keys('Test')

# 发送正文
# 框架定位：通过元素定位
# 将这个 iframe 整体当做一个元素看待，并进行定位
iframe = driver.find_element_by_class_name('APP-editor-iframe')
# 通过元素切换到指定框架内
driver.switch_to.frame(iframe)
driver.find_element_by_css_selector('body').send_keys('ABCD')
driver.switch_to.default_content()
sleep(2)

# 发送
driver.find_element_by_class_name('nui-ico-sent-white').click()

sleep(4)
driver.quit()
